/*
 * Copyright 2006-2007 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package asphalt2.validator.util
{
	import flash.display.DisplayObject;
	
	import mx.core.Container;
	import mx.core.UIComponent;
	/**
	 * エラーチェック用ユーティリティ
	 * @author c9katayama
	 **/
	public class ValidatorUtils
	{
		/**
		 * UIComponentに対して、エラーメッセージをセットします。
		 * エラー発生時、枠だけでなく背景もエラー色にします。 
		 * エラー時の枠の色はerror-color(errorColor)、
		 * エラー時の背景はerror-background-color(errorBackgroundColor)
		 * で定義します。
		 * エラー時の背景は、error-background-colorでスタイル定義していない場合、
		 * error-colorを使用します。
		 **/
		public static function setUIError(comp:UIComponent,msg:String):void{
			//元の背景色を保存
			if(comp.getStyle("__backgroundColor")==null){
				comp.setStyle("__backgroundColor",comp.getStyle("backgroundColor"));
			}
			var errorStyle:Object = comp.getStyle("errorBackgroundColor");
			if(errorStyle==null){
				errorStyle = comp.getStyle("errorColor");
			}
			if(errorStyle != null){	
				comp.setStyle("backgroundColor",errorStyle);
			}
			comp.errorString = msg;
		}
		/**
		 * エラー状態のUIComponentを元に戻します。
		 **/
		public static function resetUIError(comp:UIComponent):void{
			//元の背景色がある場合、その背景色を取得してセット
			if(comp.getStyle("__backgroundColor")!=null){
				comp.setStyle("backgroundColor",comp.getStyle("__backgroundColor"));
			}
			comp.errorString = "";
		}
		/**
		 * 引数のコンテナ以下のUIComponentを検索し、エラー状態を元に戻します。
		 * @param container 対象のコンテナ
		 * @param deepSearch コンテナ内にコンテナがある場合、その中も検索するかどうか　デフォルトtrue
		 **/
		public static function resetChildrenUIError(container:Container,deepSearch:Boolean=true):void{
			var children:Array = container.getChildren();			
			for each(var child:DisplayObject in children){
				if(child is Container && deepSearch){
					resetChildrenUIError(child as Container);
				}else if(child is UIComponent){
					resetUIError(UIComponent(child));
				}
			}
		}
	}
}